home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / dev / gcc / Info2Guide.lha / Info2Guide / Info2Guide.REXX < prev    next >
Encoding:
OS/2 REXX Batch file  |  1993-12-23  |  6.0 KB  |  219 lines

  1. /* Info2Guide.REXX
  2.  
  3. ; $VER: Info2Guide.REXX 1.1 ©1993 by Alessandro Ponzio (22.12.93)
  4.  
  5.  */
  6.  
  7. Parse Arg Nome .
  8.  
  9. Say 'RAM:Info2Guide.REXX 1.0 - by Alessandro Ponzio'||D2C(10)
  10.  
  11. If Nome='NOME'
  12.    Then Exit
  13.  
  14. Open(STDERR,'*','Read')
  15.  
  16. FileIn='Work:Linguaggi/gcc/info/'||Nome||'.info'
  17. /*FileIn='RAM:'||Nome||'.info'
  18. */Say 'Processing file '||FileIn||'...'||D2C(10)
  19. Address Command 'List NOHEAD '||FileIn
  20.  
  21. If ~Open(In,FileIn,'Read')
  22.    Then Do
  23.           WriteLn(STDERR,'+++ Info2Guide.REXX : Can''t reach file')
  24.           Exit
  25.         End
  26.  
  27. FileOut='Work:Linguaggi/'||Nome||'.Guide'
  28. /*FileOut='RAM:'||Nome||'.Guide'
  29. */If ~Open(Out,FileOut,'Write')
  30.    Then CleanExit('Can''t reach file')
  31.  
  32. WriteLn(Out,'@DataBase '||Nome)
  33. WriteLn(Out,'@Master '||Nome)
  34. WriteLn(Out,'@(C) translation from Makeinfo by Info2Guide.REXX © 1993 A.Ponzio')
  35. WriteLn(Out,'##')
  36.  
  37. BufIn=ReadLn(In)
  38. Do While Pos(BufIn,'Indirect:')=0
  39.    WriteCh(STDOUT,'.')
  40.    BufIn=ReadLn(In)
  41.    If EoF(In)
  42.       Then CleanExit('Can''t identify file (wrong file?)')
  43. End
  44. WriteCh(STDOUT,D2C(10)||D2C(10)||'Files Index found : ')
  45.  
  46. n=1
  47. BufIn=ReadLn(In)
  48. Do While Pos(D2C(31),BufIn)=0
  49.    n1=Pos('-',BufIn)
  50.    If n=0
  51.       Then CleanExit('Can''t identify file (wrong file?)')
  52.  
  53.    n2=Pos(':',BufIn)
  54.    If n=0
  55.       Then CleanExit('Can''t identify file (wrong file?)')
  56.  
  57.    n=SubStr(BufIn,n1+1,n2-n1-1)
  58.    BufIn=ReadLn(In)
  59. End
  60. WriteLn(STDOUT,n||' items detected.')
  61.  
  62. BufIn=ReadLn(In)
  63. If Pos('Tag Table:',BufIn)=0
  64.    Then CleanExit('Can''t identify file (wrong file?)')
  65.  
  66. WriteLn(Out,'@Node Main '||D2C(34)||Nome||D2C(34)||D2C(10))
  67.  
  68. WriteLn(STDOUT,D2C(10)||'   Building Main Node')
  69. BufIn=ReadLn(In)
  70. Do While BufIn~=D2C(31)
  71.    n1=Pos('Node: ',BufIn)
  72.    If n1~=0
  73.       Then Do
  74.              If n1~=1
  75.                 Then WriteCh(Out,SubStr(BufIn,1,n1))
  76.              BufIn=Strip(SubStr(BufIn,n1+5),'Leading')
  77.              n2=Pos(D2C(127),BufIn)
  78.              txt=SubStr(BufIn,1,n2-1)
  79.              WriteCh(Out,' @{'||D2C(34)||' '||txt||' '||D2C(34)||' Link ')
  80.              WriteLn(Out,D2C(34)||txt||D2C(34)||'}')
  81.              WriteCh(STDOUT,'.')
  82.            End
  83.       Else WriteLn(Out,BufIn)
  84.    BufIn=ReadLn(In)
  85. End
  86.  
  87. WriteCh(STDOUT,D2C(10))
  88. WriteLn(Out,'@EndNode '||D2C(34)||'Main'||D2C(34))
  89.  
  90. BufIn=ReadLn(In)
  91. If BufIn~='End Tag Table'
  92.    Then WriteLn(STDERR,'+++ Info2Guide.REXX : Minor problem in translation')
  93.  
  94. Close(In)
  95.  
  96. cnt=1
  97. Do While cnt~=n+1
  98.    FileIn='Work:Linguaggi/gcc/info/'||Nome||'.info-'||cnt
  99. /*   FileIn='RAM:'||Nome||'.info-'||cnt
  100. */   WriteLn(STDOUT,D2C(10)||'Processing file '||FileIn||'...'||D2C(10))
  101.    Address Command 'List NOHEAD '||FileIn
  102.    If ~Open(In,FileIn,'Read')
  103.       Then CleanExit('Can''t reach file number '||cnt)
  104.  
  105.    BufIn=ReadLn(In)
  106.    Do While Pos(BufIn,D2C(31))=0
  107.       WriteCh(STDOUT,'.')
  108.       BufIn=ReadLn(In)
  109.       If EoF(In)
  110.          Then CleanExit('Can''t identify file (wrong file?)')
  111.    End
  112.  
  113.    WriteLn(STDOUT,D2C(10))
  114.  
  115.    BufIn=ReadLn(In)
  116.  
  117.    Do While ~Eof(In)
  118.  
  119.       n1=Pos('Node:',BufIn)
  120.       If n1=0
  121.          Then CleanExit('Parser Fatal Error : Can''t identify file (wrong file?)')
  122.       BufIn=SubStr(BufIn,n1+5)
  123.       txt=D2C(34)||Strip(SubStr(BufIn,1,Pos(',',BufIn)-1),'Leading')||D2C(34)
  124.       WriteCh(STDOUT,'   Node '||txt||' detected : processing ...')
  125.       WriteLn(Out,D2C(10)||'@Node '||txt||' '||txt)
  126.  
  127.       n1=Pos('Next:',BufIn)
  128.       If n1~=0
  129.          Then Do
  130.                 BufIn=SubStr(BufIn,n1+5)
  131.                 txt=Strip(SubStr(BufIn,1,Pos(',',BufIn)-1),'Leading')
  132.                 If txt='(DIR)'
  133.                    Then txt='Main'
  134.                 WriteLn(Out,'@Next '||D2C(34)||txt||D2C(34)||' '||D2C(34)||txt||D2C(34))
  135.               End
  136.       n1=Pos('Prev:',BufIn)
  137.       If n1~=0
  138.          Then Do
  139.                 BufIn=SubStr(BufIn,n1+5)
  140.                 txt=Strip(SubStr(BufIn,1,Pos(',',BufIn)-1),'Leading')
  141.                 If txt='(DIR)'
  142.                    Then txt='Main'
  143.                 WriteLn(Out,'@Prev '||D2C(34)||txt||D2C(34)||' '||D2C(34)||txt||D2C(34))
  144.               End
  145.       n1=Pos('Up:',BufIn)
  146.       If n1~=0
  147.          Then Do
  148.                 txt=Strip(SubStr(BufIn,n1+3),'Leading')
  149.                 If txt='(DIR)'
  150.                    Then txt='Main'
  151.                 WriteLn(Out,'@Toc '||D2C(34)||txt||D2C(34)||' '||D2C(34)||txt||D2C(34))
  152.               End
  153.          Else WriteLn(Out,'@Toc Main')
  154.       BufIn=ReadLn(In)
  155.       If EoF(In)
  156.          Then BufIn=D2C(31)
  157.       If BufIn=''
  158.          Then BufIn=D2C(31)
  159.  
  160.       While Pos(D2C(31),BufIn)~=0
  161.             BufIn=ReadLn(In)
  162.  
  163.       Do While Pos(D2C(31),BufIn)=0
  164.          If Pos('* Menu:',BufIn)
  165.             Then Md='Menu'
  166.          If Pos('::',BufIn)~=0
  167.             Then Do
  168.                    txt=SubStr(BufIn,1,Pos('::',BufIn)-1)
  169.                    n1=Pos('* ',txt)
  170.                    If n1=0
  171.                       Then n1=WordIndex(txt,1)-1
  172.                       Else n1=n1+1
  173.                    WriteCh(Out,SubStr(txt,1,n1))
  174.                    txt=SubStr(txt,n1+1)
  175.                    n2=Pos('*note ',txt)
  176.                    If n2~=0
  177.                       Then Do
  178.                              WriteCh(Out,SubStr(BufIn,1,n2-1))
  179.                              txt=SubStr(txt,n2+6)
  180.                            End
  181.                    txt=D2C(34)||txt||D2C(34)
  182.                    WriteCh(Out,'@{'||txt||' Link '||txt||'} ')
  183.                    BufIn=SubStr(BufIn,Pos('::',BufIn)+2)
  184.                    WriteLn(Out,BufIn)
  185.                  End
  186.             Else WriteLn(Out,BufIn)
  187.          BufIn=ReadLn(In)
  188.          If Pos(D2C(31),BufIn)~=0
  189.             Then Do
  190.                    BufIn=ReadLn(In)
  191.                    If Pos('Node:',BufIn)~=0
  192.                       Then BufIn=D2C(31)||BufIn
  193.                  End
  194.          If EoF(In)
  195.             Then BufIn=D2C(31)
  196.       End
  197.       WriteLn(Out,'@EndNode'||D2C(10))
  198.       WriteLn(STDOUT,' done.')
  199.    End
  200.    Close(In)
  201.    cnt=cnt+1
  202. End
  203. Close(Out)
  204.  
  205. Say D2C(10)||'Info2Guide.REXX : successfully done.'
  206.  
  207. Return 0
  208.  
  209. CleanExit: Procedure
  210.   Parse Arg Mess
  211.   WriteCh(STDERR,'+++ Info2Guide.REXX : ')
  212.   If Mess~='MESS'
  213.      Then WriteLn(STDERR,Mess)
  214.      Else WriteLn(STDERR,' error has occurred')
  215.   Close(In)
  216.   Close(Out)
  217.   Exit
  218. Return 0
  219.